package com.bianpai.log;

import com.bianpai.core.Flow;
import com.bianpai.core.FlowContext;
import com.bianpai.core.Node;
import com.bianpai.core.NodeResult;

/**
 * 流程日志记录器接口
 */
public interface FlowLogger {
    /**
     * 记录流程开始
     * @param flow 流程定义
     * @param context 流程上下文
     */
    void logFlowStart(Flow flow, FlowContext context);
    
    /**
     * 记录流程完成
     * @param flow 流程定义
     * @param context 流程上下文
     * @param success 是否成功
     * @param message 消息
     */
    void logFlowComplete(Flow flow, FlowContext context, boolean success, String message);
    
    /**
     * 记录节点开始
     * @param node 节点
     * @param context 流程上下文
     */
    void logNodeStart(Node node, FlowContext context);
    
    /**
     * 记录节点完成
     * @param node 节点
     * @param context 流程上下文
     * @param result 节点执行结果
     */
    void logNodeComplete(Node node, FlowContext context, NodeResult result);
    
    /**
     * 记录节点错误
     * @param node 节点
     * @param context 流程上下文
     * @param exception 异常
     */
    void logNodeError(Node node, FlowContext context, Exception exception);
    
    /**
     * 记录回滚开始
     * @param flow 流程定义
     * @param context 流程上下文
     */
    void logRollbackStart(Flow flow, FlowContext context);
    
    /**
     * 记录回滚完成
     * @param flow 流程定义
     * @param context 流程上下文
     */
    void logRollbackComplete(Flow flow, FlowContext context);
    
    /**
     * 记录节点回滚开始
     * @param node 节点
     * @param context 流程上下文
     */
    void logNodeRollbackStart(Node node, FlowContext context);
    
    /**
     * 记录节点回滚完成
     * @param node 节点
     * @param context 流程上下文
     * @param success 是否成功
     */
    void logNodeRollbackComplete(Node node, FlowContext context, boolean success);
    
    /**
     * 记录节点回滚错误
     * @param node 节点
     * @param context 流程上下文
     * @param exception 异常
     */
    void logNodeRollbackError(Node node, FlowContext context, Exception exception);
}